Skip to content

Latest commit

 

History

History
1250 lines (677 loc) · 23.8 KB

But How Do I.rst

File metadata and controls

1250 lines (677 loc) · 23.8 KB

But How Do I...?

Items

Get an Item

Python

itemRegistry.getItem("My_Item")
# or
ir.getItem("My_Item")

JavaScript

itemRegistry.getItem("My_Item")
// or
ir.getItem("My_Item")

Groovy

itemRegistry.getItem("My_Item")
// or
ir.getItem("My_Item")

Rules DSL

My_Item

Get the state of an Item

Python

items["My_Item"]
# or after importing anything within the ``core`` package
items.My_Item
# or
ir.getItem("My_Item").state

JavaScript

items["My_Item"]
// or
ir.getItem("My_Item").state

Groovy

items["My_Item"]
// or
ir.getItem("My_Item").state

Rules DSL

My_Item.state

Get the triggering Item

Python

ir.getItem(event.itemName)

JavaScript

ir.getItem(event.itemName)

Groovy

ir.getItem(event.itemName)

Rules DSL

triggeringItem

Get the triggering Item's name

Python

event.itemName

JavaScript

event.itemName

Groovy

event.itemName

Rules DSL

triggeringItem.name

Get the triggering Item's state

Python

event.itemState

JavaScript

event.itemState

Groovy

event.itemState

Rules DSL

triggeringItem.state

Get the triggeringItem's previous state

Python

event.oldItemState

JavaScript

event.oldItemState

Groovy

event.oldItemState

Rules DSL

previousState

Get the received command

Python

event.itemCommand

JavaScript

event.itemCommand

Groovy

event.itemCommand

Rules DSL

receivedCommand

Send a command to an Item

More details

Python

events.sendCommand("Test_SwitchItem", "ON")
# or
events.sendCommand(ir.getItem("Test_SwitchItem"), ON)

JavaScript

events.sendCommand("Test_SwitchItem", "ON")
// or
events.sendCommand(ir.getItem("Test_SwitchItem"), ON)

Groovy

events.sendCommand("Test_SwitchItem", "ON")
// or
events.sendCommand(ir.getItem("Test_SwitchItem"), ON)

Rules DSL

Test_SwitchItem.sendCommand(ON)
// or
sendCommand("Test_SwitchItem", "ON")

Send an update to an Item

More details

Python

events.postUpdate("Test_SwitchItem", "ON")

JavaScript

events.postUpdate("Test_SwitchItem", "ON")

Groovy

events.postUpdate("Test_SwitchItem", "ON")

Rules DSL

Test_SwitchItem.postUpdate(ON)
// or
postUpdate("Test_SwitchItem", "ON")

Stop a rule if the triggering Item's state is NULL or UNDEF

Python

if isinstance(items[event.itemName], UnDefType):
    return
# do stuff

JavaScript

if (items[event.itemName].class == UnDefType.class) {
    return
} else {
    // do stuff
}

Groovy

TODO

Rules DSL

if (triggeringItem.state == NULL || triggeringItem.state == UNDEF) {
    return
} else {
    // do stuff
}

Convert a value to a state for comparison

Python

items["String_Item"] == StringType("test string")
items["Number_Item"] > DecimalType(5)
items["Temperature_Item"] > QuantityType(u"55 °F")
event.itemState <= DecimalType(event.oldItemState.intValue() + 60)
event.itemState <= DecimalType(event.oldItemState.doubleValue() + 60)
event.itemState <= DecimalType(event.oldItemState.floatValue() + 60)

JavaScript

TODO

Groovy

TODO

Rules DSL

TODO

Convert DecimalType to an integer or float for arithmetic

Python

int(str(items["Number_Item1"])) + int(str(items["Number_Item2"])) > 5
items["Number_Item1"].intValue() + items["Number_Item2"].intValue() > 5
float(str(items["Number_Item"])) + 5.5555 > 55.555
items["Number_Item"].floatValue() + 5.5555 > 55.555

JavaScript

TODO

Groovy

TODO

Rules DSL

TODO

Convert a state to a formatted string

Follow the formatting syntax from: https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax

Python

str = items["DateTime_Item"].format("%1$tR")    
str = items["Number_Item"].format("%.2f")

JavaScript

TODO

Groovy

TODO

Rules DSL

TODO

Groups

Get the members or all members of a Group

Python

# just direct members, which could include groups
ir.getItem("gTest").members

# iteratively, all child Items and the child Items of all child groups
ir.getItem("gTest").allMembers

JavaScript

// just direct members, which could include groups
ir.getItem("gTest").members

// iteratively, all child Items and the child Items of all child groups
ir.getItem("gTest").allMembers

Groovy

// just direct members, which could include groups
ir.getItem("gTest").members

// iteratively, all child Items and the child Items of all child groups
ir.getItem("gTest").allMembers

Rules DSL

// just direct members, which could include groups
gTest.members

// iteratively, all child Items and the child Items of all child groups
gTest.allMembers

Intersection of two groups

Python

list_of_items = [item.name for item in itemRegistry.getItem("gDS_FamilyRoom").members if "gMotion_Sensor" in item.groupNames]

# or
list_of_items = [item for item in itemRegistry.getItem("gDS_FamilyRoom").members if item in itemRegistry.getItem("gMotion_Sensor").members]

# or
list_of_items = [item.name for item in itemRegistry.getItem("gMotion_Sensor").members if item in itemRegistry.getItem("gDownstairs").allMembers]

JavaScript

TODO

Groovy

TODO

Rules DSL

TODO

Iterate over members of a Group

Python

for item in ir.getItem("gTest").members:
    # do stuff

JavaScript

TODO

Groovy

TODO

Rules DSL

gTest.members.forEach[item |
    // do stuff
]

Filter members of a group

Python

Returns a list of Items, not a GroupItem

listOfMembers = filter(lambda item: item.state == ON, ir.getItem("gTest").members)

# or using a list comprehension

listOfMembers = [item for item in ir.getItem("gTest").members if item.state == ON]

JavaScript

TODO

Groovy

TODO

Rules DSL

Returns a GrouptItem

val listOfMembers = gTest.members.filter(GenericItem item | item.state == ON)

Get the first Item in a filtered list of Group members

Python

my_item = filter(lambda item: item.state == ON, ir.getItem("gTest").members)[0]

# or using a list comprehension

my_item = [item for item in ir.getItem("gTest").members if item.state == ON][0]

JavaScript

TODO

Groovy

TODO

Rules DSL

val myItem = gTest.members.findFirst(item.state == ON)

Get first 5 Items from a filtered list of Group members

Python

Returns a list of Items

my_items = filter(lambda item: item.state == OFF, ir.getItem("gTest").members)[0:5]

# or using a list comprehension

my_items = [item for item in ir.getItem("gTest").members if item.state == ON][0:5]

JavaScript

TODO

Groovy

TODO

Rules DSL

TODO

Get a sorted list of Group members matching a condition

Python

Returns a list of Items

sorted_battery_level = sorted(battery for battery in ir.getItem("gBattery").getMembers() if battery.state < DecimalType(5), key = lambda battery: battery.state)

JavaScript

TODO

Groovy

TODO

Rules DSL

TODO

Get a list of values mapped from the members of a Group

Python

Returns a list of strings

battery_levels = map(lambda lowBattery: "{}: {}".format(lowBattery.label, str(lowBattery.state) + "%"), ir.getItem("gBattery").members)

JavaScript

TODO

Groovy

TODO

Rules DSL

TODO

Perform an arithmetic reduction of values from members of a Group

Python

Returns a value

# to use the add() method, the states must be of type QuantityType (`Units of Measure <https://www.openhab.org/docs/concepts/units-of-measurement.html>`_)
weekly_rainfall = reduce(lambda sum, x: sum.add(x), map(lambda rain: rain.state, ir.getItem("gRainWeeklyForecast").members))

JavaScript

TODO

Groovy

TODO

Rules DSL

TODO

Example with several functions using Group members

Python

Returns a string

lowBatteryMessage = "Warning! Low battery alert:\n\n{}".format(",\n".join(map(lambda lowBattery: "{}: {}".format(lowBattery.label,str(lowBattery.state) + "%"), sorted(battery for battery in ir.getItem("gBattery").getMembers() if battery.state < DecimalType(5), key = lambda battery: battery.state))))

JavaScript

TODO

Groovy

TODO

Rules DSL

TODO

Miscellaneous

Single line comment

Python

# this is a single line comment

JavaScript

// this is a single line comment

Groovy

// this is a single line comment

Rules DSL

// this is a single line comment

Multiline comment

Python

'''
this is
a multiline
comment
'''

JavaScript

/*
this is
a multiline
comment
*/

Groovy

/*
this is
a multiline
comment
*/

Rules DSL

/*
this is
a multiline
comment
*/

View the names of an object's attributes

Python

# replace `object` with the object you'd like to introspect
log.debug("dir(object)=[{}]".format(dir(object)))

JavaScript

TODO

Groovy

// replace `object` with the object you'd like to introspect
object.properties.each{log.warn("object: " + it)}

Rules DSL

Not possible

View all symbols in a context

Python

log.debug("dir()=[{}]".format(dir()))

JavaScript

Not possible

Groovy

TODO

Rules DSL

Not possible

Get the UID of a rule by name

Python

ruleUID = filter(lambda rule: rule.name == "This is the name of my rule", rules.getAll())[0].UID

# or using a list comprehension

ruleUID = [rule for rule in rules.getAll() if rule.name == "This is the name of my rule"][0].UID

JavaScript

TODO

Groovy

TODO

Rules DSL

Not possible

Enable or disable a rule by UID

Python

from core import osgi
ruleEngine = osgi.get_service("org.openhab.core.automation.RuleManager") or osgi.get_service("org.eclipse.smarthome.automation.RuleManager")
ruleEngine.setEnabled(ruleUID, True)# enable rule
ruleEngine.setEnabled(ruleUID, False)# disable rule

JavaScript

TODO

Groovy

TODO

Rules DSL

Not possible

Run a rule by UID

Python

from core import osgi
ruleEngine = osgi.get_service("org.openhab.core.automation.RuleManager") or osgi.get_service("org.eclipse.smarthome.automation.RuleManager")
ruleEngine.runNow(ruleFunction.UID)
consider_conditions = True# consider the rule's Conditions
ruleEngine.runNow(ruleFunction.UID, considerConditions, {'name': 'EXAMPLE'})

JavaScript

TODO

Groovy

TODO

Rules DSL

Not possible

Get Thing Status

Python

from org.eclipse.smarthome.core.thing import ThingUID

thing_status = things.get(ThingUID('kodi:kodi:familyroom')).status

JavaScript

var ThingUID = Java.type("org.eclipse.smarthome.core.thing.ThingUID");

var thingStatus = things.get(new ThingUID('kodi:kodi:familyroom')).status;

Groovy

TODO

Rules DSL

var thingStatus = getThingStatusInfo('kodi:kodi:familyroom').status

Enable/disable a Thing

Python

from core.log import logging, LOG_PREFIX
log = logging.getLogger("{}.TEST".format(LOG_PREFIX))
from core import osgi
try:
    from org.openhab.core.thing import Thing UID
except:
    from org.eclipse.smarthome.core.thing import ThingUID

thing_manager = osgi.get_service("org.openhab.core.thing.ThingManager") or osgi.get_service("org.eclipse.smarthome.core.thing.ThingManager")
kodi_thing = things.get(ThingUID("kodi:kodi:familyroom"))
thing_manager.setEnabled(ThingUID("kodi:kodi:familyroom"), False)# disable Thing
log.debug("Disabled: isEnabled [{}], statusInfo [{}]".format(kodi_thing.isEnabled(), kodi_thing.statusInfo))
thing_manager.setEnabled(ThingUID("kodi:kodi:familyroom"), True)# enable Thing
log.debug("Enabled: isEnabled [{}], statusInfo [{}]".format(kodi_thing.isEnabled(), kodi_thing.statusInfo))

JavaScript

TODO

Groovy

TODO

Rules DSL

TODO

Read/Add/Remove Item metadata

Python

See the examples in the module... ../Python/Core/Packages and Modules/metadata

JavaScript

TODO

Groovy

TODO

Rules DSL

Metadata can be added and removed, but not read

Use org.joda.time.DateTime

Python

from org.joda.time import DateTime
start = DateTime.now()

JavaScript

var DateTime = Java.type("org.joda.time.DateTime");
start = DateTime.now()

Groovy

import org.joda.time.DateTime
start = DateTime.now()

Rules DSL

now

Pause a thread

Python

from time import sleep
sleep(5)# the unit is seconds, so use 0.5 for 500 milliseconds

JavaScript

TODO

Groovy

TODO

Rules DSL

Thread::sleep(5000)// the unit is milliseconds

Use a timer

Python

See the timer_example.py in the Script Examples for examples of using both Python threading.Timer and the openHAB createTimer Action.

JavaScript

TODO

Groovy

TODO

Rules DSL

TODO

Use Logging

See Guides/Logging:Logging.

Use Actions

See Guides/Actions:Actions.